package com.yupi.springbootinit.statemachine.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yupi.springbootinit.statemachine.dto.StateMachineConfigQueryRequest;
import com.yupi.springbootinit.statemachine.dto.StateMachineConfigUpdateRequest;
import com.yupi.springbootinit.statemachine.entity.StateMachineConfig;

import java.util.List;

/**
 * 状态机配置服务接口
 */
public interface StateMachineConfigService extends IService<StateMachineConfig> {
    
    /**
     * 分页查询状态机配置
     * @param request 查询请求
     * @return 分页结果
     */
    IPage<StateMachineConfig> queryConfigs(StateMachineConfigQueryRequest request);
    
    /**
     * 根据状态类型获取配置
     * @param stateType 状态类型
     * @return 配置列表
     */
    List<StateMachineConfig> getConfigsByStateType(String stateType);
    
    /**
     * 根据配置键获取配置
     * @param configKey 配置键
     * @return 配置对象
     */
    StateMachineConfig getConfigByKey(String configKey);
    
    /**
     * 更新配置
     * @param request 更新请求
     * @param userId 操作用户ID
     * @return 是否成功
     */
    boolean updateConfig(StateMachineConfigUpdateRequest request, Long userId);
    
    /**
     * 批量更新配置
     * @param configs 配置列表
     * @param userId 操作用户ID
     * @return 是否成功
     */
    boolean batchUpdateConfigs(List<StateMachineConfig> configs, Long userId);
    
    /**
     * 重置配置为默认值
     * @param configKey 配置键
     * @param userId 操作用户ID
     * @return 是否成功
     */
    boolean resetConfigToDefault(String configKey, Long userId);
    
    /**
     * 获取所有有效配置
     * @return 配置列表
     */
    List<StateMachineConfig> getAllActiveConfigs();
    
    /**
     * 刷新配置缓存
     */
    void refreshConfigCache();
    
    /**
     * 验证配置值的有效性
     * @param configKey 配置键
     * @param configValue 配置值
     * @return 是否有效
     */
    boolean validateConfigValue(String configKey, String configValue);
}